package cw.itsource.controller;

import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

@RestController
@RequestMapping("/consumer")
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;

    //这个方法，需要发起一个远程请求，去访问  prodiver工程
    //使用到RestTemplate
//    @GetMapping
//    public String getIndex() {
//        /*
//            这种请求的方式，存在一个问题，如果项目在本地开发完后，部署到服务器，这个请求还能成功访问吗？
//                不能。必须在部署之前，再改这个代码，才可以访问！！！
//                    eureka注册中心，就可以解决访问提供者的数据时，不再通过IP+端口访问
//         */
//        String forObject = restTemplate.getForObject("http://localhost:8811/provider", String.class);
//        return forObject;
//    }
    //这个是为了根据实例的名称，到eureka中，找实例对应的真实IP地址
    @Autowired
    private DiscoveryClient discoveryClient;// Eureka客户端，可以获取到服务实例信息

    @GetMapping
    public String getIndex() {
        // 根据服务名称，获取服务实例
        List<ServiceInstance> instances = discoveryClient.getInstances("USER-PROVIDER");
        // 因为只有一个UserService,因此我们直接get(0)获取
        int i = RandomUtils.nextInt(0, 2);
        System.out.println("i="+i);
        ServiceInstance instance = instances.get(i);
        // 获取ip和端口信息
        String baseUrl = "http://" + instance.getHost() + ":" + instance.getPort() + "/provider";
        String forObject = this.restTemplate.getForObject(baseUrl, String.class);

        return forObject;
    }

}
